package com.lxk.service;

import com.lxk.pojo.Device;
import com.lxk.pojo.Rules;

/**
 * @author JohnSoybean
 * @create 2020/7/15 10:40
 * @description
 */
public interface PlayService {

    /*
    1. 生成二维码/获取二维码，将该用户存入已激活二维码redis中
    2. 解析二维码信息 判断二维码是否处于激活状态
    3. 排队扫码：判断机器id，将机器id与用户id存入redis队列
    4. 结束游戏，排队倒计时
    5. 扫码确认，扣银币，返回发球次数
     */

    /**
     * 验证机器
     * @param deviceNumber
     * @return
     */
    Device deviceVerify(String deviceNumber);

    /**
     * 生成二维码/获取二维码，将该用户存入已激活二维码redis中
     * @param userId
     * @return
     */
    String getQRCode(Long userId);


    /**
     * 字节数组转化为uuid
     * @param bytes
     * @return
     */
    String byteArrayToUuid(byte[] bytes);


    /**
     * uuid转化为用户id
     * @param uuid
     * @return
     */
    Long uuidToUserId(String uuid);

    /**
     * 判断二维码是否已激活(不需要，已在转化中判断)
     * @param userId
     * @return
     */
    boolean isQrCodeActivated(Long userId);

    /**
     * 用户加入排队队列
     * @param userId
     * @return
     */
    boolean joinQueue(Device device, Long userId, String uuid);

    /**
     * 用户扫码确认 验证队伍 扣银币 获取发球数
     * @param userId
     * @return 发球数 0为无
     */
    Integer confirmScan(Device device, Long userId, String uuid);

    /**
     * 结束当前用户
     * @param userId
     */
    boolean endCurrent(String deviceNumber, Long userId);

    /**
     * 监听队列过期
     */
    void scheduleQueueExpire();

    /**
     * 获取规则
     * @return
     */
    Rules getRule();

}
